Booting (or the boot process) is the process of starting a computing device from a halted or powered-down condition. A computing device can be a mainframe computer, desktop computer, laptop computer, personal digital assistant, server, client, router, switch, or similar device. The term “system” is used as a shorthand for a computing device or part of a computing device.
When a computing device is first switched on (or reset), its volatile memory (e.g., main system memory) is empty. Computing devices, therefore, are typically designed to access a fixed range of addresses in non-volatile memory for instructions and data that assist the computing device in the boot process. Non-volatile memory includes read-only memory (ROM), erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), flash memory, and the like.
Flash memory is a type of EEPROM in which each flash memory device is divided into one or more memory banks. Flash memory functions more quickly than other types of EEPROM because data is written into or erased from flash memory devices bank-by-bank rather than one byte at a time. All of the data within a bank is erased when data is written into any region within that bank.
Bootable information is information that a computing device uses during the boot process and is specific to the operating system used by the computing device. Typically, bootable information includes one or more of a master boot record, a boot record, file allocation tables, a root directory, a table of descriptors, a boot catalog directory, system configuration files and the like. Bootable information can include both data and instructions. A boot image is a collection of bootable information that enables a computing system to complete the boot process. Computing devices sometimes store a primary boot image and an alternate boot image in the same bank of a flash memory device.
FIG. 1 is a block diagram of conventional chip select system 100 that is suitable for use by a computing system during the boot process. Chip select system 100 includes memory devices 102–108, 2 to 4 decoder 110, and address lines A0–A3. Memory devices 102–108 are flash memory devices each having a single bank of memory. For illustrative purposes, memory devices 102–108 are each capable of containing four words of data or instructions. A person of ordinary skill in the art will recognize that the number of address lines and the size of the memory devices can be varied to suit the needs of different computing devices.
Since each memory device 102–108 only contains four words of data/instructions, each device only needs two address lines. Therefore, address lines A0 and A1 are connected to memory devices 102–108. The four words within memory devices 102–108 are selected by the addresses XX00, XX01, XX10, and XX11, wherein X stands for either 1 or zero. Address lines A2 and A3 are connected to 2 to 4 decoder 110 and are used to select one of the four memory devices. For example, memory device 102 can be selected with address 00XX and memory device 108 can be selected with address 11XX.
During the boot process, conventional computing devices decode fixed addresses to access bootable information in non-volatile memory. For example, a computing device may decode fixed addresses 0000 to 0011, range_A, to access bootable information. When range13A is decoded, chip select system 100 selects memory device 102. If the bootable information in memory device 102 is corrupted, then the computing device may not successfully boot.
Conventional computing devices typically store all bootable information within a single memory bank of a flash memory device. For example, a conventional computing device may store two boot images in the single memory bank of flash memory device 102. The computing device may use a software flag to select which boot image is accessed by inverting address lines A0 and A1. During an initial boot process, for example, 0001 may be accessed for bootable information. If an error occurs, the software flag is set and, during the subsequent boot process, 0010 is accessed for bootable information. Both boot images are vulnerable when, for example, flash memory device 102 is written to, because flash memory is written on a bank-by-bank basis.